require('./services/init.js')
const validate = require('validate.js')
const moment = require("moment")
async function vff(stuObj) {

    // 扩展验证规则:判断班级是否存在 
    // 验证通过返回 undfined
    validate.validators.classExits = async function (value) {
        const c = await Class.findByPK(value)
        if (c) return

        return "班级不存在，验证不通过"
    }

    // 只保留需要的字段处理

    // 验证规则
    const rules = {
        name: {
            // presence 属性必须存在且不为undefined null 允许空字符串
            // presence: true,  // { name: [ "Name can't be blank" ] }
            // presence: { message: 'name is not fond' } // { name: [ 'Name name is not fond' ] }
            presence: {
                allowEmpty: false // {} [] "" " " 也不能通过
            },
            type: "string", // 必须字符串类型
            length: {
                // ls: 10, 长度固定为10
                minimum: 2, // 范围
                maximum: 8
            }
        },
        birthday: {
            presence: {
                allowEmpty: false
            },
            datetime: {
                dateOnly: true, // 只需要日期
                earliest: +moment.utc().subtract(100, 'y'), // 最早不能早于100年前的时间戳
                latest: +moment.utc().subtract(5, 'y'),  // 最不能不能晚于5年前的时间戳
            }
        },
        sex: {
            presence: true,
            type: "boolean"
        },
        phone: {
            presence: true,
            type: "string",
            format: /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/
        },
        ClassId: {
            presence: true,
            // type: 'integer' //严格整数 字符串数字不行
            numericality: {
                onluInteger: true,
                strict: false
            },
            classExits: true
        }
    }
    // 验证通过 返回undefined stuObj:验证对象 
    // 同步验证
    // const res = validate.validate(stuObj, rules)
    // return res

    // 异步验证
    try {
        await validate.async(stuObj, rules)
    } catch (e) {
        // 验证通过抛出错误信息
        console.log(e)
    }

};

vff({
    name: "zz",
    birthday: '2015-03-05',
    sex: true,
    phone: '13723829302',
    ClassId: 12
})
